package com.hb.C_Lambda表达式和集合.E_内联函数


/**
 * 返回值：调用者本身
 *
 * 1、also函数使用的一般结构
         object.also{
        //todo
        }
 *
 * 2、also源码
     @kotlin.internal.InlineOnly
    @SinceKotlin("1.1")
    public inline fun <T> T.also(block: (T) -> Unit): T {
    contract {
    callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    block(this)
    return this
    }
 *
 * 3、also函数的inline结构分析
 * also函数的结构实际上和let很像唯一的区别就是返回值的不一样，
 * let是以闭包的形式返回，返回函数体内最后一行的值，如果最后一行为空就返回一个Unit类型的默认值。而also函数返回的则是传入对象的本身
 *
 * 4、also函数的适用场景
 * 适用于let函数的任何场景，also函数和let很像，
 * 只是唯一的不同点就是let函数最后的返回值是最后一行的返回值而also函数的返回值是返回当前的这个对象。
 * 一般可用于多个扩展函数链式调用
 */
fun main() {
    val result = "testAlso".also {
        println(it.length)
        1000
    }
    //testAlso
    println(result)
}